#ifndef __AOF_PERSIST_H__
#define __AOF_PERSIST_H__
#include "nolock_list.h"
#include "public.h"
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <pthread.h>  // 新增：引入线程库

// 异步AOF写入器结构体（封装队列、线程状态、线程ID）
typedef struct AOFAsyncWriter
{
    SPSCLockFreeListQueue *queue; // 无锁队列
    atomic_bool running;          // 线程运行标志
    pthread_t thread_id;          // 后台线程ID
    char *filename;         // AOF日志文件名（可选，也可在写入时传递）

    // 新增：定时刷盘相关
    int fd;                     // 文件描述符
    bool has_unflushed;// 是否有未刷盘数据（C11原子bool）
    unsigned int flush_interval; // 刷盘间隔（毫秒，如3000=3秒）
    struct timespec last_flush; // 上次刷盘时间（单调时间）  
} AOFAsyncWriter;


// ======== 基本的写入操作和读取操作 ========
int aof_write(const char *filename, const char *operation, const char *key, const char *value);
int aof_replay(const char *filename, off_t start_offset, RBTree* rbtree, HashTable* hash_table, SkipList* skiplist);

// =============== 增量异步写入 ================
AOFAsyncWriter* aof_async_writer_init(const char *filename, unsigned int flush_ms); // 初始化异步写入器（创建队列、启动后台线程）, 刷盘间隔flush_ms
int aof_async_write(AOFAsyncWriter *writer, const char *filename, const char *operation, const char *key, const char *value);// 异步写入函数（接收AOFAsyncWriter实例指针）
void aof_async_writer_destroy(AOFAsyncWriter *writer); // 销毁异步写入器（等待线程、销毁队列）


#endif